package com.jtbd.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jtbd.constants.ResponseCodeEnum;
import com.jtbd.domain.Course;
import com.jtbd.dto.request.CourseItemHttpDto;
import com.jtbd.exceptions.SystemException;
import com.jtbd.service.campus.CourseService;
import com.jtbd.util.JtbdPageUtil;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;

@Service
public class CourseManagementService {
    @Resource
    private CourseService courseService;

    /**
     * 获取指定校区的课程列表分页数据
     *
     * @param campusId  校区ID，用于筛选指定校区的课程
     * @param pageIndex 页码，从0开始计数
     * @param pageSize  每页显示的记录数
     * @return 课程分页数据，包含课程列表和分页信息
     */
    public IPage<Course> getCourseList(Long campusId, Integer pageIndex, Integer pageSize) {
        return courseService.getCourseList(campusId, JtbdPageUtil.getPage(pageIndex, pageSize));
    }


    /**
     * 根据条件查询课程列表
     *
     * @param campusId       校区ID，用于筛选指定校区的课程
     * @param courseStatus   课程状态，用于筛选指定状态的课程
     * @param courseLevel    课程级别，用于筛选指定级别的课程
     * @param courseCategory 课程分类，用于筛选指定分类的课程
     * @param courseType     课程类型，用于筛选指定类型的课程
     * @param courseName     课程名称，用于模糊匹配课程名称
     * @return 符合条件的课程列表
     */
    public IPage<Course> getCourseListByCondition(Long campusId, Integer courseStatus, Integer courseLevel, Integer courseCategory, Integer courseType, String courseName, Integer pageIndex, Integer pageSize) {
        return courseService.getCourseListByCondition(campusId, courseStatus, courseLevel, courseCategory, courseType, courseName, JtbdPageUtil.getPage(pageIndex, pageSize));
    }


    /**
     * 添加课程信息
     *
     * @param course 课程信息传输对象，包含课程的基本信息
     * @return 返回添加成功的课程ID，如果添加失败则返回null
     */
    public Long addCourse(CourseItemHttpDto course) {
        Long courseId = courseService.addCourse(CourseItemHttpDto.toCourse(course));
        if (ObjectUtils.isEmpty(courseId)) {
            throw new SystemException(ResponseCodeEnum.ERROR.getCode(), "添加课程失败");
        }
        return courseId;
    }

}
